package leedcode_path.treeNoDE;

import java.util.Arrays;
import java.util.Collections;

public class 最大二叉树 {
    /*
    * nums = [3,2,1,6,0,5]
输出：[6,3,5,null,2,0,null,null,1]
解释：递归调用如下所示：
- [3,2,1,6,0,5] 中的最大值是 6 ，左边部分是 [3,2,1] ，右边部分是 [0,5] 。
    - [3,2,1] 中的最大值是 3 ，左边部分是 [] ，右边部分是 [2,1] 。
        - 空数组，无子节点。
        - [2,1] 中的最大值是 2 ，左边部分是 [] ，右边部分是 [1] 。
            - 空数组，无子节点。
            - 只有一个元素，所以子节点是一个值为 1 的节点。
    - [0,5] 中的最大值是 5 ，左边部分是 [0] ，右边部分是 [] 。
        - 只有一个元素，所以子节点是一个值为 0 的节点。
        - 空数组，无子节点。*/
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        if (nums==null) return null;

        return buildtree(nums,0,nums.length);

    }
    public  TreeNode buildtree(int[] nums,int start,int end){
        if (start==end) return null;
        int maxval=getnumsmax(nums,start,end);
        TreeNode root=new TreeNode(maxval);
        int max;
        for (max= start; max < end; max++) {
            if (nums[max]==maxval) break;
        }

        int leftstart=start;
        int leftend = max;

        int rightstart = max + 1;
        int rightend = end;

        root.left = buildtree(nums, leftstart, leftend);
        root.right = buildtree(nums, rightstart, rightend);

        return root;



    }
    public int getnumsmax(int[] nums,int start,int end){
        int max=-1;
        for (int i=start;i<end;i++){
            if (nums[i]>max){
                max=nums[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
        int[] nums=new int[]{3,2,1,6,0,5};
        最大二叉树 a=new 最大二叉树();
        a.constructMaximumBinaryTree(nums);
    }
}
